package liquidfs.data.ops;

import java.io.*;
import java.util.*;

import liquidfs.*;
import liquidfs.data.*;

public interface Operation<T> {
	
   public boolean isModification ();
   public boolean isFileOperation ();
  
	public PeerDevice getOrigin ();
	public Notification getNotification ();
	
	public long getID ();
	
	public int getMaximumInputSize ();
	public int getMaximumOutputSize ();
	
	public boolean reached (PeerDevice device);
	public Set<PeerDevice> getReachedDevices ();
	
	public void addReachedDevice (PeerDevice device);
   public void addReachedDevices (Collection<PeerDevice> devices);
	
	public abstract T execute (Application app, InputStream in, OutputStream out);
	
}
